#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
新闻日报定时任务与邮件发送模块
- 使用 APScheduler 实现定时任务
- 发送 HTML 邮件
"""

from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.cron import CronTrigger
import emailTool


def start_scheduler():
    """启动定时任务调度器"""
    print("启动新闻报告定时任务调度器...")

    # 阻塞式调度器，阻塞当前线程，等待任务执行
    scheduler = BlockingScheduler()

    # 添加每天晚上8点执行的任务
    scheduler.add_job(
        emailTool.scheduler_send_news_report, # 定时任务
        CronTrigger(hour=20, minute=0),  # 每天20:00执行。时间规则
        id='daily_news_report',
        name='每日新闻报告',
        replace_existing=True
    )
    """
    add_job 方法参数说明
        send_news_report: 要执行的可调用对象（函数），这里是 send_news_report 函数，用于生成并发送新闻报告。
        CronTrigger(hour=20, minute=0): 任务触发器，指定任务执行的时间规则。这里使用 CronTrigger 创建一个 cron 表达式触发器，设置为每天 20:00（晚上8点）执行。
        id='daily_news_report': 任务的唯一标识符。用于标识这个特定的任务，在需要修改或删除任务时可以通过这个 ID 来操作。
        name='每日新闻报告': 任务的可读名称。这个名称主要用于日志记录和监控，便于识别任务的用途。
        replace_existing=True: 当存在相同 ID 的任务时，是否替换已存在的任务。设置为 True 表示如果已经有一个 ID 为 'daily_news_report' 的任务，将会被当前任务替换。
    """
    
    try:
        scheduler.start()
        print("定时任务已启动成功")
    except KeyboardInterrupt:
        print("调度器已停止")
        scheduler.shutdown()

#
#
# def setup_email_config():
#     """设置邮箱配置"""
#     print("请配置邮箱信息：")
#
#     config = {}
#     config['sender'] = input("发件人邮箱: ")
#     config['receiver'] = input("收件人邮箱: ")
#     config['password'] = input("邮箱授权码: ")
#
#     # 根据邮箱类型自动设置 SMTP 服务器
#     if "@qq.com" in config['sender']:
#         config['smtp_server'] = "smtp.qq.com"
#         config['smtp_port'] = 587
#     elif "@gmail.com" in config['sender']:
#         config['smtp_server'] = "smtp.gmail.com"
#         config['smtp_port'] = 587
#     else:
#         config['smtp_server'] = input("SMTP服务器地址: ")
#         try:
#             config['smtp_port'] = int(input("SMTP端口 (默认587): ") or "587")
#         except ValueError:
#             config['smtp_port'] = 587
#
#     # 保存配置
#     if save_email_config(config):
#         print("邮箱配置已保存:")
#         for key, value in config.items():
#             # 不显示密码
#             if key != 'password':
#                 print(f"  {key}: {value}")
#             else:
#                 print(f"  {key}: {'*' * len(value) if value else ''}")
#
# def test_email_config():
#     """测试邮箱配置"""
#     config = load_email_config()
#     if not config:
#         print("未找到邮箱配置，请先配置邮箱信息")
#         return
#
#     print("测试邮箱配置...")
#     try:
#         smtp = smtplib.SMTP(config['smtp_server'], config['smtp_port'])
#         smtp.starttls()
#         smtp.login(config['sender'], config['password'])
#         smtp.quit()
#         print("邮箱配置测试成功！")
#     except Exception as e:
#         print(f"邮箱配置测试失败: {e}")
#
# def main():
#     """主函数"""
#     print("新闻日报定时任务与邮件发送工具")
#     print("1. 启动定时任务调度器(每晚8点发送)")
#     print("2. 立即发送一次新闻报告")
#     print("3. 配置邮箱信息")
#     print("4. 测试邮箱配置")
#     print("5. 退出")
#
#     choice = input("请选择操作 (1/2/3/4/5): ")
#
#     if choice == "1":
#         start_scheduler()
#     elif choice == "2":
#         send_news_report()
#     elif choice == "3":
#         setup_email_config()
#     elif choice == "4":
#         test_email_config()
#     elif choice == "5":
#         sys.exit(0)
#     else:
#         print("无效选择")
#
# if __name__ == "__main__":
#     main()